package main
import (
	"fmt"
)

// 演示golang中srring类型使用
func main() {
	// string的基本使用
	var address string = "北京长城 110 hello world!"
	fmt.Println("address=", address)

	// 字符串一旦赋值了，字符串就不能修改了：在Go中字符串是不可变的
	// var str = "hello"
	// str[0] = 'a' // cannot assign to str[0]: 这里就不能去修改str的内容，即go中的字符串是不可变的。

	/*
		字符串的两种表示形式（1）双引号，会失败转义字符（2）反引号，
	以字符串的原生形式输出，包括换行和特殊字符，可以实现防止工级
	输出源代码等效果【案例演示】
	*/
	str2 := "abc\nabc"
	fmt.Println(str2)

	// 使用的反引号 ``
	str3 := `
	package main
	import (
		"fmt"
		"unsafe"
	)

	// 演示golang布尔类型使用
	func main() {
		var b = false
		fmt.Println("b=", b)
		// 注意事项
		// 1. bool类型占用的存储空间是1个字节
		fmt.Println("b 的占用空间 =", unsafe.Sizeof(b))
		// 2. bool类型只能取true或者false

	}
	`

	fmt.Println("str3=", str3)

	// 字符串拼接方式
	var str = "hello " + "world"
	str += " haha!"

	fmt.Println(str)
	// 当一个拼接的操作很长时，怎么办，可以分行写，但是注意，需要将+保留在上一行。
	// 注意，加号 + 必须放到行尾在换行，因为go编译时会自动在末尾加 ';' 当 + 放到行头，每行自动结束
	var str4 = "hello " + "world" + "hello " + "world" + "hello " +
	"world" + "hello " + "world" + "hello " + "world" +
	"hello " + "world" +
	"\n"
	fmt.Println(str4)

	// 基本数据类型默认值
	var a int // 0
	var b float32 // 0
	var c float64 // 0
	var isMarryied bool // false
	var name string  // ""
	// 这里的%v 表示按照变量的值输出: a=0,b=0,c=0,isMarryied=false,name=
	fmt.Printf("a=%v,b=%v,c=%v,isMarryied=%v,name=%v", a, b, c, isMarryied, name)

}